class Student {
    fullName: string;
    constructor(public firstName, public middleInitial, public lastName) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user: Student = new Student("Jane", "M.", "User");
//布尔值
let isDone: boolean = false;
///和JavaScript一样，TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 
//除了支持十进制和十六进制字面量，Typescript还支持ECMAScript 2015中引入的二进制和八进制字面量。
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
//字符串
//JavaScript程序的另一项基本操作是处理网页或服务器端的文本数据。 像其它语言里一样，我们使用 string表示文本数据类型。
// 和JavaScript一样，可以使用双引号（ "）或单引号（'）表示字符串。
{
    let name: string = "bob";
    name = "smith";
}
//你还可以使用模版字符串，它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围（ `），并且以${ expr }这种形式嵌入表达式
{
    let name: string = `Gene`;
    let age: number = 37;
    let sentence: string = `Hello, my name is ${ name }.
    I'll be ${ age + 1 } years old next month.`;
    console.log(sentence);
}
//数组
let list1: number[] = [1, 2, 3];
//第二种方式是使用数组泛型，Array<元素类型>：
let list2: Array<number> = [1, 2, 3];

//元组 Tuple
let x: [string, number];
// Initialize it
x = ['hello', 10,'32','23']; // OK
console.log(x);
// Initialize it incorrectly
// x = ['10', 'hello',22]; // Error
//枚举

document.body.innerHTML = greeter(user)+name;